// 原型链继承
// function Parent() {
//   this.name = 'parent';
//   this.play = [1, 2, 3, 4, 5];
// }

// function Child() {
//   this.name = 'child';
// }

// Child.prototype = new Parent();

// let c1 = new Child();

// let c2 = new Child();

// c1.play.push(...[4, 5, 6, 8]);

// console.log(c1.play, c2.play);

// 构造函数继承

// function Parent() {
//   this.name = 'parent';
// }

// Parent.prototype.getName = ()=>{
//   console.log(thius.name)
// }

// function Child(){
//   Parent.call(this)

//   this.name = 'child'
// }

// let c = new Child()

// c.getName()

// 组合继承
// function Parent() {
//   this.name = 'parent';
//   this.pay = [1, 2, 3, 4, 5];
// }

// Parent.prototype.getName = function() {
//   return this.name;
// };

// function Child() {
//   Parent.call(this);
//   this.type = 'child';
// }

// Child.prototype = new Parent();

// Child.prototype.constructor = Child;

// let c1 = new Child();

// let c2 = new Child();

// c1.pay.push(100);

// // console.log(c1.pay, c2.pay);  // 互不影响

// console.log(c1.getName());
// console.log(c2.getName());

// 原型式继承
// let parent = {
//   name:'parent',
//   firends:[1,2,34,4],
//   getName:function(){
//     return this.name
//   }
// }

// let parson = Object.create(parent)

// parson.name = 'tom'
// parson.firends.push('jiang')

// let p2 = Object.create(parent)
// p2.firends.push('tao')

// console.log(parson.firends)
// 这种继承方式的缺点也很明显，因为Object.create方法实现的是浅拷贝，多个实例的引用类型属性指向相同的内存，存在篡改的可能\

// 寄生式继承

// let parent = {
//   name: 'parent',
//   friends: [1, 23, 4, 5],
//   getName: function () {
//     return this.name;
//   }
// };

// function clone(or){
//   let clone = Object.create(or)
//   clone.getFriends = function(){
//     return this.friends
//   }

//   return clone
// }

// let parson = clone(parent)

// console.log(parson.getName())

// console.log(parson.friends)
// 其优缺点也很明显，跟上面讲的原型式继承一样

// 寄生组合式继承
// function clone(parent,child){
//   child.prototype = Object.create(parent.prototype)
//   child.prototype.constructor = child
// }

// function Parent(){
//   this.name = 'parent'
//   this.play = [1,2,3]
// }

// Parent.prototype.getName = function(){
//   return this.name
// }

// function Child(){
//   Parent.call(this)
//   this.friends = 'childss'
// }

// clone(Parent,Child)

// Child.prototype.getFriends = function(){
//   return this.friends
// }

// let c = new Child()

// console.log(c)

// let o1={
//   name:null,
//   name1:undefined,
//   n3:1,
//   n2:Symbol('a'),
//   n6:function(){}
// }

// console.log(JSON.parse(JSON.stringify(o1)))

function doSom(){}

console.log(doSom.prototype)